Cloud computing refers to highly scalable networked computing systems capable of delivering elastic computing performance to numerous users. Cloud computing typically involves clusters of densely packed computing servers, called nodes, with each node potentially executing dozens of virtual machines. Typically, each node includes a hypervisor or other virtualization framework, and the entire cloud computing cluster includes one or more cloud controllers that manage instantiation of virtual machines on the particular compute nodes. OpenStack is one example of such a cloud computing framework.
In a multi-tenant cloud computing environment, the virtual machines on a particular node may be controlled by different customers. Thus, the resources of the node, such as processor, network, and storage resources, must be shared among the virtual machines and thus among different customers. Cloud computing customers typically expect and may be sold a predictable performance level for each virtual machine in the cloud computing cluster. However, the performance of a virtual machine may be impacted by the behavior of other virtual machines on the same node. This is sometimes called the “noisy neighbor” problem; that is, some virtual machine workloads have side effects that impact the performance of other virtual machines executing on the same node. In addition to the outright reduction in performance, the noisy neighbor problem may cause virtual machine performance to be unpredictable, which can be particularly undesirable for cloud customers and providers.